<?php  
require_once('../zAPI/properties.inc.php');
require_once( ROOT_CLASS . 'Kernel.class.php');
require_once( $kernel->getClass("Util") );
require_once( $kernel->getClass("BusinessObject") );
require_once( ROOT_CLASS . 'DataObject/AtividadeDO.class.php');
require_once( ROOT_DATA_OBJECT . 'DataObject.class.php');
require_once( ROOT_CLASS . 'zAccess/zAccess.class.php' );
require_once( ROOT_CLASS . 'zSendMail/zSendMail.class.php' );
?>

<?php 

class AtividadeController{
	
	
	function __construct(){
		$AccessAction = new AccessAction();
		$AccessAction->validSessionUsuario();
    }
	
	function capturarAtividade($instanceDB, $postRequest, $getRequest){
		$atividadeBO = new AtividadeBO();
		$result = $atividadeBO->capturarAtividade($instanceDB, $postRequest["codigoAtividade"]);

		$retorno = "{";
		$retorno .= "success 	: true,";
		$retorno .= "message	: 'Atividade capturada com sucesso',";
		$dados = "";
		$aux = "";
		for ($i = 0; $i < count($result); $i++){
			$dados .= $aux . utf8_encode( $result[$i]->transformDataObjectToJSON() );
			$aux = ",";
		}
		$retorno .= "elements : [" . $dados . "]";
		$retorno .= "}";
				
		return $retorno;
	}
	
	
	function listarAtividades($instanceDB, $postRequest, $getRequest){
		//metodo para testar os parametros ..verificar se estao "echoando"..depois do teste Lelex ir� retirar
		//$this->alertarAtrasoAtividade($instanceDB, 1);
		
		$atividadeBO = new AtividadeBO();
		
		$result = $atividadeBO->listarAtividades($instanceDB, $postRequest["codigoProjeto"]);

		for($i=0; $i < count($result); $i++){
			$status = $this->verificaStatus($result[$i]->get("dataFimRealizado"));
			$result[$i]->add("status",$status);	

		}
	
		$result = $this->adicionaPosicao($result);
		
		$retorno = "{";
		$retorno .= "success 	: true,";
		$retorno .= "message	: 'Atividades listados com sucesso',";
		$dados = "";
		$aux = "";
		for ($i = 0; $i < count($result); $i++){
			$dados .= $aux . utf8_encode( $result[$i]->transformDataObjectToJSON() );
			$aux = ",";
		}
		$retorno .= "elements : [" . $dados . "]";
		$retorno .= "}";
		
		return $retorno;
	
	}
	
	//Metodo que recebe a data termino e flag o resgitro indicando concluida ou nao concluida
	function verificaStatus($terminoAtividade){
		if ($terminoAtividade <> ''){
			$status="Concluída";
		}
		else{
			$status="Não concluída";
		}
		return $status;
	}
	

	
	function adicionaPosicao($listAtividade){
		
		$timestampAtual = strtotime(date('Y-m-d'));
		
		for($i=0; $i < count($listAtividade); $i++){
			
			if($listAtividade[$i]->get("dataFimRealizado") != "null" && $listAtividade[$i]->get("dataFimRealizado") != "" && $listAtividade[$i]->get("dataFimRealizado") != "0000-00-00"){
				$listAtividade[$i]->add("posicao","TR");
			}else if($timestampAtual > strtotime($listAtividade[$i]->get("dataFim"))){
				$listAtividade[$i]->add("posicao","AT");
			}else{
				if($timestampAtual >= strtotime($listAtividade[$i]->get("dataInicio"))  ){
					$listAtividade[$i]->add("posicao","EA");
				}else if($timestampAtual < strtotime($listAtividade[$i]->get("dataInicio"))){
					$listAtividade[$i]->add("posicao","NI");
				}
			}
		}
		
		return $listAtividade;
	}
	
	function inserir($instanceDB, $postRequest, $getRequest){
		
		$atividadeBO = new AtividadeBO();
		$atividadeDO = new AtividadeDO();
		
		$atividadeDO->loadDataObjectByPost( $postRequest, TRUE );
		//colcoar aki o método que verifica a data das atividades
		if($this->validaDataAtividade($instanceDB, $atividadeDO)){
			$result = $atividadeBO->inserir($instanceDB, $atividadeDO);
		
			if ( $result === FALSE ){
				$retorno = "{";
				$retorno .="success : false,";
				$retorno .="message : 'Não foi possível inserir as informações.'";
				$retorno .="}";
			} else {
				$retorno .="{";
				$retorno .="success : true,";
				$retorno .="message : 'Inserido com com sucesso!',";
				$dados = "";
				$aux = "";
				for ($i = 0; $i < count($result); $i++){
					$dados .= $aux . utf8_encode( $result[$i]->transformDataObjectToJSON() );
					$aux = ",";
				}
				$retorno .="elements : [" . $dados . "]";
				$retorno .="}";
				
			}
			
			//return $retorno
		}else{
				$retorno .= "{";
				$retorno .="success : false,";
				$retorno .="message : 'Incompatibilidade nos valores de data. Não foi possível inserir as informações.'";
				$retorno .="}";			
			
		}
		return $retorno;
		
	}
	
	//Metodo que recebe um Do de atividade e verifica se as datas da atividades estão dentro do período
	//do projeto e se a data fim da atividade é maior que a data inicio da atividade
	function validaDataAtividade ($instanceDB, $atividadeDO){

	$Projeto_codigo = $atividadeDO->get("Projeto_codigo");
	$projetoBO = new ProjetoBO();
	
	$projetoDO = $projetoBO->capturarProjeto($instanceDB, $Projeto_codigo);
	
	$dataInicioProjeto = $projetoDO[0]->get("dataInicio");
	$dataFimProjeto = $projetoDO[0]->get("dataFim");
	$dataInicioAtividade = $atividadeDO->get("dataInicio");
	$dataFimAtividade = $atividadeDO->get("dataFim");
	
	$objKernel = new Kernel();
	if (strtotime($objKernel->stringToSqlDate($dataInicioAtividade)) >= strtotime($dataInicioProjeto) & 
		strtotime($objKernel->stringToSqlDate($dataFimAtividade)) >= strtotime($dataInicioProjeto) & 
		strtotime($objKernel->stringToSqlDate($dataInicioAtividade)) <= strtotime($dataFimProjeto) & 
		strtotime($objKernel->stringToSqlDate($dataFimAtividade)) <= strtotime($dataFimProjeto) &
		strtotime($objKernel->stringToSqlDate($dataInicioAtividade)) <= strtotime($objKernel->stringToSqlDate($dataFimAtividade))){
		return TRUE;
	}
	else { 	return FALSE; 
	}
	
	
	//1. Validar se a data início da atividade ou data fim atividade é menor do que a Data de término do projeto (tem que ser menor)
	//2. Validar se a data início da atividade ou data fim atividade é maior do que a Data de inicio do projeto (tem que ser menor)
	//3. Validar se a data fim da atividade é menor que a data inicio atividade		
	}

	//metodo que valida se uma atividade pode ser excluida
	//sera excluida apenas se nao tiver nenhuma referencia na tabela movimentocaixa
	function validaExclusao($instanceDB, $codigoAtividade){
		
		$atividadeBO = new AtividadeBO();
		$result = $atividadeBO->validaExclusao($instanceDB, $codigoAtividade);
		$valida = $result[0]->get("atividade");
		if ($valida == '0'){
			return TRUE;}
		else{return FALSE;}
	}	
	
	function excluir($instanceDB, $postRequest, $getRequest){
			
		$atividadeBO = new AtividadeBO();
		$atividadeDO = new AtividadeDO();
		
		$codigoAtividade = $_POST["codigoAtividade"];
		if ($this->validaExclusao($instanceDB, $codigoAtividade)){
		
			$atividadeDO->set( "codigo", $codigoAtividade );
		
			$resultadoAtividade = $atividadeBO->excluir( $instanceDB, $atividadeDO );
		
			if ( $resultadoAtividade === FALSE){
				$retorno = "{";
				$retorno .= "success : false,";
				$retorno .= "message : 'Não foi possível excluir o registro.'";
				$retorno .= "}";
			}else {
				$retorno .= "{";
				$retorno .= "success : true,";
				$retorno .= "message : 'Excluído com sucesso!'";
				$retorno .= "}";
			}
		}
		else{
				$retorno .= "{";
				$retorno .="success : false,";
				$retorno .="message : 'Não é possível excluir a atividade, ela possui gastos.'";
				$retorno .="}";	
			}		
		return $retorno;
		
	}


	function alterar($instanceDB, $postRequest, $getRequest){
		
		$atividadeBO = new AtividadeBO();
		$atividadeDO = new AtividadeDO();
		
		$atividadeDO->loadDataObjectByPost( $postRequest, TRUE );
		//colcoar aki o método que verifica a data das atividades
		if($this->validaDataAtividade($instanceDB, $atividadeDO)){		
		
		$resultadoAtividade = $atividadeBO->alterar( $instanceDB, $atividadeDO );
			
		if ( $resultadoAtividade === FALSE){
			$retorno = "{";
			$retorno .= "success : false,";
			$retorno .= "message : 'Não foi possível alterar o registro.'";
			$retorno .= "}";
		}else {
			$retorno .=  "{";
			$retorno .= "success : true,";
			$retorno .= "message : 'Alterado com sucesso!'";
			$retorno .= "}";
		}
		
		//return $retorno;
		}
		else {
				$retorno .= "{";
				$retorno .="success : false,";
				$retorno .="message : 'Incompatibilidade nos valores de data. Não foi possível alterar as informações.'";
				$retorno .="}";				
		}
		return $retorno;
	
	}
	//esse metodo nao existe o metodo somatoriaAtividadeGastos eh chamado no calculaGastos do ProjetoBO
	function  somatoriaAtividadesGastos($instanceDB, $postRequest, $getRequest){
		
		$atividadeBO = new AtividadeBO();
		$somaAtividade = $atividadeBO->somatoriaAtividadesGastos($instanceDB, $_POST["codigoProjeto"]);
		
		
		if ( $somaAtividade === FALSE ){
			$retorno = "{";
			$retorno .= "success : false,";
			$retorno .= "message : 'Erro ao calcular os gastos'";
			$retorno .= "}";
		}else{
			
			$retorno .= "{";
			$retorno .= "success 	: true,";
			$retorno .= "message	: 'Gastos calculados com sucesso',";
			$retorno .= "elements : ['valorEstimadoProjeto': '".$somaAtividade."'";
		$retorno .= "}";
		
		return $retorno;
			
		}

	}




	/*
	 * O método responsável por setar 
	 * a data atual no campo dataFimRealizado, indicando o término da atividade. Receberá como 
	 * parâmetro o código da atividade a ser encerrada.
	 */
	function encerrarAtividade ($instanceDB, $postRequest, $getRequest){
		
		$atividadeBO = new AtividadeBO();
		$encerrarAtividade = $atividadeBO->encerrarAtividade($instanceDB, $postRequest["codigoAtividade"]);
		
		
		if ( $encerrarAtividade === FALSE ){
			$retorno = "{";
			$retorno .= "success : false,";
			$retorno .= "message : 'Erro ao encerrar atividade'";
			$retorno .= "}";
		}else{
			
			$retorno = "{";
			$retorno .= "success 	: true,";
			$retorno .= "message	: 'Atividade encerrada com sucesso!'";
			$retorno .= "}";
		}		
		return $retorno;
	}	
	
	
	/*
	 * Criar servi�o no controller que envia email para volunt�rio alertando sobre atraso 
	 * de atividade. Esse servi�o vai ser chamado quando se selecionar uma atividade em 
	 * atraso. Para fazer isso basta captur a atividade em quest�o, juntamente com os dados 
	 * do volunt�rio(ser�o utilizados nome e email), ou seja ser� necess�rio instanciar 
	 * AtividadeBO chamando o m�todo capturarAtividade() e instanciar VoluntarioBO chamando 
	 * o m�todo capturarVoluntario(), a mensagem a ser formatada deve conter informa��es 
	 * da atividade em quest�o e ser enviada para o volunt�rio respons�vel. Esse servi�o 
	 * deve ser implementado em AtividadeController.
	 */
	
	function listarAtividadesSemMovimento($instanceDB, $postRequest, $getRequest){
		
		$projetoBO = new ProjetoBO();
		
		$listAtividadesSemMovimento = $projetoBO->listarAtividadesSemMovimento($instanceDB, $postRequest["codigoProjeto"]);
		
		if ( $projecaoEst === FALSE ){
			$retorno = "{";
			$retorno .= "success : false,";
			$retorno .= "message : 'Erro ao listar Atividades sem movimento'";
			$retorno .= "}";
		}else{
			
			$retorno .= "{";
			$retorno .= "success 	: true,";
			$retorno .= "message	: 'Atividades sem movimento listadas com sucesso',";
			$dados = "";
			$aux = "";
			for ($i = 0; $i < count($listAtividadesSemMovimento); $i++){
				$dados .= $aux . utf8_encode( $listAtividadesSemMovimento[$i]->transformDataObjectToJSON() );
				$aux = ",";
			}
			$retorno .= "elements : [" . $dados . "]";
		$retorno .= "}";
		}
		return $retorno;	
	}
	function alertarAtrasoAtividade($instanceDB, $codigoAtividade){
	//apresentar no email titulo da atividade, data de inicio, fim e descri��o
		$atividadeBO = new AtividadeBO ();
		$voluntarioBO = new VoluntarioBO ();
		$projetoBO = new ProjetoBO();
		
		$atividade = $atividadeBO->capturarAtividade($instanceDB, $codigoAtividade);
		$codigoProjeto = $atividade[0]->get("Projeto_codigo");
		$codigoVoluntario = $atividade[0]->get("Voluntario_Pessoa_codigo");
		$tituloAtividade = $atividade[0]->get("titulo");
		$dataInicioAtividade = $atividade[0]->get("dataInicio");
		$dataFimAtividade = $atividade[0]->get("dataFim");
		$instrucaoAtividade = $atividade[0]->get("instrucao");
		
		$projeto = $projetoBO->capturarProjeto($instanceDB, $codigoProjeto);
		$tituloProjeto = $projeto[0]->get("nome");
				
		$voluntarioDO = new VoluntarioDO();
		$voluntarioDO->set("Pessoa_codigo",$codigoVoluntario);
		
		$voluntario = $voluntarioBO->capturarVoluntario($instanceDB, $voluntarioDO);
		$nomeVoluntario = $voluntario[0]->get("nome");
		$emailVoluntario = $voluntario[0]->get("email");
		
		echo "Codigo Projeto $codigoProjeto<br>";
		echo "Codigo VOluntario $codigoVoluntario<br>";
		echo "titulo atividade $tituloAtividade<br>";
		echo "data inicio $dataInicioAtividade<br>";
		echo "data fim $dataFimAtividade<br>";
		echo "instrucao $instrucaoAtividade<br>";
		echo "nome projeto $tituloProjeto<br>";
		echo "nome voluntario $nomeVoluntario<br>";
		echo "email voluntario $emailVoluntario<br>";

	    $Email = new SendMail;
    
	    $Email->setFrom("Classificados Portal", "leandrex_boy@yahoo.com.br");  //seu email
	
	    $Email->addTo("Marcos Hot","leandrinho_boy@hotmail.com");
	
	    $Email->addBcc("MarcosGmail CopiaOculta","gimenez_leandro@hotmail.com");
	
	    $Email->setSubject("Assunto do email");
	    $Email->setMessage("Corpo do email com <strong>HTML</strong>");
	
	    //$Email->Attach($_FILES["arquivo"]);   //Anexo 1
	    //$Email->Attach($_FILES["arquivo1"]);   //Anexo 2 - para mais anexos é só anexar mais =P
	
	    if($Email->send()){           //Envia o email
	        echo "Email enviado";
	    } else {
	        echo "Email não pode ser enviado";
		}		
		
	}
	
		
}

?>